package com.cskaoyan._03api;

import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
 * @description:
 * @author: 景天
 * @date: 2023/2/21 16:36
 **/
/*
案例:

定义一个flag标记, true 是正常状态  false中断

主线程打印3个数 打印1个 休眠1秒  中断子线程

创建子线程  打印10个数 休眠1秒

打印之前判断一下是否中断 如果正常----> 打印数据

如果发生了中断-------> 不在打印, 并且把中断信息保存到log.txt文件中

格式 年月日 时分秒  哪个线程发生了中断
 */
public class SecurityStop {
    public static void main(String[] args) {
        System.out.println("main start");
        // 创建线程对象
        SecurityStopThread t = new SecurityStopThread();
        // 启动线程
        t.start();
        for (int i = 0; i < 3; i++) {
            System.out.println("main----"+i);
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

        // 中断线程
        t.flag = false;

        System.out.println("main end");
    }
}
class SecurityStopThread extends Thread{
    boolean flag = true;
    // run

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            // 判断线程状态
            if (flag) {
                // 如果正常  打印
                System.out.println(getName() + "----" + i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }else{
                // 如果为false 发生了中断
                // 不在打印, 把中断信息保存到log.txt文件中
                // 创建SimpleDataFormat对象 指定日期格式
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                // 创建字符输出流对象
                FileWriter fileWriter = null;
                try {
                    fileWriter = new FileWriter("log.txt");
                    // write(String s)
                    fileWriter.write(sdf.format(new Date())+
                            getName()+"发生了中断!");
                    // flush
                    fileWriter.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }finally {
                    // close 释放资源
                    if (fileWriter != null) {
                        try {
                            fileWriter.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }


            }
        }
    }
}